package com.example.utils;

import java.io.FileWriter;
import java.io.IOException;
import java.net.URISyntaxException;

/**
 * @author 游家纨绔
 * @dateTime 2023-09-08 00:00
 * @apiNote TODO 定义支付需要的变量
 */
public class AppUtils {

	// 定义应用id，就是对应的支付宝账号 APPID
	public static String app_id = "9021000126672181";

    // 定义支付宝的公钥
    // 使用 支付宝开发平台密钥工具 生成的基于RSA2算法的应用公钥，且设置到支付宝沙箱应用加签方式[自定义密钥的公钥模式]里
    // 设置好后查看会出现有两个密钥：应用密钥、支付宝密钥  我们这里使用的便是支付宝密钥
    public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2M/ng5jhPXaLKR3gTUFOLF9spPeOW6VNyimXVFg+hXR35Kf1U8vp6PWQ+4s1pUVLxSfYAUqP51Yvp64iS8WeuKs/2EP2iO5sS4GfAg3kP2HJuKgVHxkWnMfm1OI6rlqpyLZu7SSYmPQCM8yRbTwGglzOz0dpXMznkblHy+UmcYgOYA3XU98kMbTrCqF4TEEbeaDq1QEHLZnIYXDW8lIRBShrQ5XYe3mqroiubByyJHzi1VuL1mOPRgOhxnW2uHLYTIaO0np+ggRLK7Her933EbshXEhcAyf7g/5ly83Clbt1DoRvxlE9xcOw4v9goImNlAOGYDNgd6IYAY2pzsJYwIDAQAB";

    // 定义商户的私钥(使用 支付宝开发平台密钥工具 生成的基于RSA2算法公钥同时生成的应用私钥)
    public static String merchant_private_key = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCVKTWTdaWxze1nHYUu0wh2d/ng0QCIXRC22QadU2XGNi8ShmMEm6QZLWh93njrZ12VaP0PflJu7ffgYWYaa1QsNDSTI1EtXx9C8Fvk9Y0YMekebVRM7YSVn9HoDks8A5yN/z1lj9P0OB4LPp5LBPsKHXOjtmrDH8rDmwy5SpVXKDWg4CFqGL+JYbMKDMGP6JEiDDqGZo5eVqT/r84g6Ls4DyWS6z6Zyuaq7uInysO6D52YDRBGHj+qiiqDA7bUWLIqC7VWiLUtb/hirtahl/R0QitHHTL+8LNIaSgqOjr/cNdsenD69r2wKrsEXmDMKg7XdtZsG1l0sIUvnoRMsY9TAgMBAAECggEAB2ybrBFJBAaZ8G35uRDr9OmX2GbOvfrT4CYBPEdwY2NDCIsD1rDghBhMgSdXoW/tqoglQGYrODZEBjkS2fHJqMGYdFJnsfhwF+bazBSkxzWEwuzyKzoPRVtFGWXMvNn5KuAvcCSuihNY+3pMarN+w0wf+2ATBE9Kyl2nTnm14Tadreol2h+Pw/CggmjXUPodS0vi8aBzIRDvcQjUvZiJgHhe68TgOTqfQxrr+oFdMsKs/7QSSY2BTkLgGk10Fa+jso8zkxDyN40vVVUF9zgXrE5yjDbG/a73XUx0ZL77PLS4Qi6Km3mXGDjlZ9TL6sbQH5gzic0XLZFAZ0VZgcyEgQKBgQDKMjsU+SO2FAXCtAAiEdUvWbRQbw8bWSnyTslszsQ5erywAMFe/Mrhgg+AwZaX8GvYkTOjju9xwra+niGdWd17+7zq4CWARD0/4LrCItPGnPpwUTw5THQyMV6flEuTSlKPdkuKawIbOGNbOeF/AetSbqWZmWJFQnuqLZ+lJHdLswKBgQC82izWHLdcXzJ3ZXt1ILrV+npFAjMh6RLqukvLE+L4AexTqCdc27efoO6FOxd4h+JCF9+0KU7p3NMUN/MFTFtluU2GUj8BY6xLYW9ZETRVrVzaTOMUB7fo0a3zscNV9NjUXn+D/aeF6oQ5l8YzmV+gcFNssgayW+x/7jz3ZUhd4QKBgCb495pbSx7VTSbyOvRWK5ks2SyHu4mx7fveY8StNfU+SxBBlQQSBajhwMs4hSZUGPVtR17HNi/fMAodwKzrnV1AcHF1MsU+Ye/mCRlSTS+DImJzxf/lVKA4E9z+YHLLaI5uZrEPXyCQBdaXmXc5j3ocCZ9JiT+ASQXMNXFHThcxAoGAAvWcTEKo8O6g+NQDSkOYCfBh6CDvsjFX1YvT0jvei6pkDK+O5lqfFwZLlpTlekMO3aBIJiebj/ig6ikySrv2lrJ/r4IscJYiRhAh0ZB+dHVCBj28NT0luaVHh5EakYdDupg8gVIBRQz2w3xIY9iccgQwmnxztGnSW/Lcy7evmaECgYBuSS0sTDZl2zZaJiittbrjK7UfE4C1m+1kamM0ta2pb1fG2h3t9pN5codvOI5f2cn/4tq5iCas2sQ42cP5UihN+1heMMXewoAUYa4pKLyReEkwYk0L7cU9FGzHWUylHOmDFkJxc2rHam9XHxid3EJ8nlJnUrPuUmVM87yHgnOh1w==";

	// 定义服务器异步通知的地址（即商户端接收支付信息的回调接口）
	// 这里使用内网穿透natApp工具得到的隧道，并加上Controller层自定义的接口getNotify 拼接而成的地址
	// 但是我们这里注册使用的是免费的隧道，有一个致命的缺点就是域名和端口会不定时发生改变(重启 natApp 后也需要自己修改)
	public static String notify_url = "http://j82ca8d6.natappfree.cc/getNotify";

	// 支付宝跳转回商户页面（即用户端完成支付后的回调接口）
	// 使用内网穿透natApp工具得到的隧道，并加上Controller层自定义的接口getReturn 拼接而成的地址
	// 但是我们这里注册使用的是免费的隧道，有一个致命的缺点就是域名和端口会不定时发生改变(重启 natApp 后也需要自己修改)
	public static String return_url = "http://j82ca8d6.natappfree.cc/getReturn";

	// 签名方式
	public static String sign_type = "RSA2";

	// 字符的编码格式
	public static String charset = "utf-8";

	// 设定网关地址(沙箱应用中的支付宝的网关接口)
	public static String gatewayUrl = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";

    // 编写写日志的方法，方便测试
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            // 获取日志相对地址
            String path = AppUtils.class.getClassLoader().getResource("").toURI().getPath();
            String logPath = path.substring(0, path.indexOf("/target"))
                             + "/src/main/resources/log/"
                             + "alipay_log" + System.currentTimeMillis() + ".txt";
            // 执行输出流
            writer = new FileWriter(logPath);
            writer.write(sWord);
        } catch (IOException | URISyntaxException e) {
            System.out.println("日志报错了！！！");
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}
